﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Data;
using System.Data.SqlClient;
using PGI.EN.TipoUsuario;

namespace PGI.AD.TipoUsuario
{
    public class TipoUsuarioAd
    {
        public static int TipoUsuario_Insertar(TipoUsuarioEn tipo_usuario)
        {
            SqlCommand command = null;
            SqlConnection connection = null;
            SqlDataReader reader = null;

            string sql = "MntTipoUsuarioITipoUsuario";

            try
            {
                connection = DataBaseFactory.SqlOpenDatabase("PGI");
                command = new SqlCommand(sql, connection);

                command.CommandType = CommandType.StoredProcedure;
                tipo_usuario.TipoUsuarioID = 0;

                command.Parameters.AddWithValue("@Descripcion", tipo_usuario.Descripcion);
                command.Parameters.AddWithValue("@Estado", tipo_usuario.Estado);
                

                command.Parameters.Add("@Resultado", SqlDbType.Int).Direction = ParameterDirection.Output;


                command.ExecuteNonQuery();

                tipo_usuario.TipoUsuarioID = Convert.ToInt32(command.Parameters["@Resultado"].Value);

                return tipo_usuario.TipoUsuarioID;
            }

            catch (SqlException ex)
            {
                throw ex;
            }
            catch (Exception ex)
            {
                throw ex;
            }

            finally
            {
                if (reader != null)
                    reader.Close();
                DataBaseFactory.SqlCloseDatabase("PGI");
            }
        }
        public static int TipoUsuario_Editar(TipoUsuarioEn tipo_usuario)
        {
            SqlCommand command = null;
            SqlConnection connection = null;
            SqlDataReader reader = null;

            string sql = "MntTipoUsuarioUTipoUsuario";

            try
            {
                connection = DataBaseFactory.SqlOpenDatabase("PGI");
                command = new SqlCommand(sql, connection);

                command.CommandType = CommandType.StoredProcedure;

                command.Parameters.AddWithValue("@TipoUsuarioID", tipo_usuario.TipoUsuarioID);
                command.Parameters.AddWithValue("@Descripcion", tipo_usuario.Descripcion);
                command.Parameters.AddWithValue("@Estado", tipo_usuario.Estado);


                command.Parameters.Add("@Resultado", SqlDbType.Int).Direction = ParameterDirection.Output;


                command.ExecuteNonQuery();

                int resultado = Convert.ToInt32(command.Parameters["@Resultado"].Value);

                return resultado;
            }

            catch (SqlException ex)
            {
                throw ex;
            }
            catch (Exception ex)
            {
                throw ex;
            }

            finally
            {
                if (reader != null)
                    reader.Close();
                DataBaseFactory.SqlCloseDatabase("PGI");
            }
        }
        public static int TipoUsuario_Eliminar(int TipoUsuarioID)
        {
            SqlCommand command = null;
            SqlConnection connection = null;
            SqlDataReader reader = null;

            string sql = "MntTipoUsuarioETipoUsuario";

            try
            {
                connection = DataBaseFactory.SqlOpenDatabase("PGI");
                command = new SqlCommand(sql, connection);

                command.CommandType = CommandType.StoredProcedure;

                command.Parameters.AddWithValue("@TipoUsuarioID", TipoUsuarioID);
                
                command.Parameters.Add("@Resultado", SqlDbType.Int).Direction = ParameterDirection.Output;

                command.ExecuteNonQuery();

                int resultado = Convert.ToInt32(command.Parameters["@Resultado"].Value);

                return resultado;
            }

            catch (SqlException ex)
            {
                throw ex;
            }
            catch (Exception ex)
            {
                throw ex;
            }

            finally
            {
                if (reader != null)
                    reader.Close();
                DataBaseFactory.SqlCloseDatabase("PGI");
            }
        }
        public static List<TipoUsuarioEn> TipoUsuario_Listar()
        {
            SqlCommand command = null;
            SqlConnection connection = null;
            SqlDataReader reader = null;

            string sql = "MntTipoUsuarioSListarTipoUsuarios";

            try
            {
                connection = DataBaseFactory.SqlOpenDatabase("PGI");

                command = new SqlCommand(sql, connection);
                command.CommandType = CommandType.StoredProcedure;
                reader = command.ExecuteReader();
                List<TipoUsuarioEn> lista = new List<TipoUsuarioEn>();

                while (reader.Read())
                {
                    TipoUsuarioEn tipo_usuarioEn = new TipoUsuarioEn();
                    tipo_usuarioEn.TipoUsuarioID = Convert.ToInt32(reader.GetValue(0));
                    tipo_usuarioEn.Descripcion = Convert.ToString(reader.GetValue(1));
                    tipo_usuarioEn.Estado = Convert.ToInt32(reader.GetValue(2));


                    lista.Add(tipo_usuarioEn);
                }

                return lista;
            }

            catch (SqlException ex)
            {
                throw ex;
            }
            catch (Exception ex)
            {
                throw ex;
            }

            finally
            {
                if (reader != null)
                    reader.Close();
                DataBaseFactory.SqlCloseDatabase("PGI");
            }
        }
    }
}
